From: Marco Trevisan (TreviƱo) Date: Sat, 31 Aug 2019 21:40:52 +0000 (+0200) Subject: search: Remove updateSearch later on destruction X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~811^2^2~166 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=c69e195441a691429d7b0e16f81e80ff062f1590;p=gnome-shell.git search: Remove updateSearch later on destruction When the GridSearchBase actor is destroyed we should remove the ongoing later that might try to access to invalid resources. To do this, add an _onDestroy() callback function to SearchResultsBase and override it in GridSearchBase. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/700 --- diff --git a/js/ui/search.js b/js/ui/search.js index d55021ac9..d4de5ece2 100644 --- a/js/ui/search.js +++ b/js/ui/search.js @@ -158,10 +158,15 @@ var SearchResultsBase = class { this._clipboard = St.Clipboard.get_default(); this._cancellable = new Gio.Cancellable(); + + this.actor.connect('destroy', this._onDestroy.bind(this)); } destroy() { this.actor.destroy(); + } + + _onDestroy() { this._terms = []; } @@ -341,14 +346,30 @@ var GridSearchResults = class extends SearchResultsBase { this._resultDisplayBin.set_child(this._bin); } + _onDestroy() { + if (this._updateSearchLater) { + Meta.later_remove(this._updateSearchLater); + delete this._updateSearchLater; + } + + super._onDestroy(); + } + updateSearch(...args) { if (this._notifyAllocationId) this.actor.disconnect(this._notifyAllocationId); + if (this._updateSearchLater) { + Meta.later_remove(this._updateSearchLater); + delete this._updateSearchLater; + } // Make sure the maximum number of results calculated by // _getMaxDisplayedResults() is updated after width changes. this._notifyAllocationId = this.actor.connect('notify::allocation', () => { - Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => { + if (this._updateSearchLater) + return; + this._updateSearchLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => { + delete this._updateSearchLater; super.updateSearch(...args); return GLib.SOURCE_REMOVE; });